﻿/*
 * Created by SharpDevelop.
 * User: CeCi
 * Date: 02/04/2014
 * Time: 06:42 p.m.
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Collections.Generic;
using System.Data;
using Gestión_UTN.bo;
using Gestión_UTN.Entities;

namespace Gestión_UTN.blimpl
{
    /// <summary>
    /// Description of materiaProfesorblimpl.
    /// </summary>
    public class materiaProfesorblimpl : Gestión_UTN.bl.materiaProfesobl
    {
        private static Gestión_UTN.da.materiaProfesorda createMatPro = Gestión_UTN.factories.dafactory.createMatPro();
        private static Gestión_UTN.bl.profesorbl createProfesor = Gestión_UTN.factories.blfactory.createProfesor();
        private static Gestión_UTN.bl.materiabl createMateria = Gestión_UTN.factories.blfactory.createMateria();

        public materiaProfesorblimpl()
        {
        }

        public bool SaveMateriaProfesor(int mat_id, int pro_dni)
        {
            bool ingresada = false;

            try
            {
                ingresada = (0 != mat_id && 0 != pro_dni)
                    ? createMatPro.SaveMateriaProfesor(mat_id, pro_dni)
                    : false;
            }
            catch (exceptions.daexception ex)
            {
                ingresada = false;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                ingresada = false;
                throw new exceptions.blexception(ex.Message);
            }

            return ingresada;
        }

        public bool DeleteMateriaProfesor(int mat_id, int pro_dni)
        {
            bool eliminada = false;

            try
            {
                eliminada = (0 != mat_id && 0 != pro_dni)
                    ? createMatPro.DeleteMateriaProfesor(mat_id, pro_dni)
                    : false;
            }
            catch (exceptions.daexception ex)
            {
                eliminada = false;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                eliminada = false;
                throw new exceptions.blexception(ex.Message);
            }

            return eliminada;
        }

        public bool ModifyMateriaProfesor(int mat_id_anterior, int pro_dni_anterior, int mat_id, int pro_dni)
        {
            bool modificada = false;

            try
            {
                modificada = (0 != mat_id_anterior && 0 != pro_dni_anterior && 0 != mat_id
                               && 0 != pro_dni)
                    ? createMatPro.ModifyMateriaProfesor(mat_id_anterior, pro_dni_anterior, mat_id, pro_dni)
                    : false;
            }
            catch (exceptions.daexception ex)
            {
                modificada = false;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                modificada = false;
                throw new exceptions.blexception(ex.Message);
            }

            return modificada;
        }

        public System.Data.DataTable FindAllMateriaProfesor()
        {
            DataTable tablaMatPro = null;

            try
            {
                tablaMatPro = createMatPro.FindAllMateriaProfesor();
            }
            catch (exceptions.daexception ex)
            {
                tablaMatPro = null;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                tablaMatPro = null;
                throw new exceptions.blexception(ex.Message);
            }

            return tablaMatPro;
        }

        public Gestión_UTN.bo.MateriasProfesorbo FindMateriaProfesorByDni(int pro_dni)
        {
            MateriasProfesorbo matsProfs = null;

            try
            {
                Profesorbo pro = (0 != pro_dni)
                    ? createProfesor.FindProfesorByDNI(pro_dni)
                    : null;

                List<MateriaProfesor> matsPro = (null != pro)
                    ? createMatPro.FindMateriaProfesorByDni(pro.Dni)
                    : null;

                if (null != matsPro)
                {

                    List<Materiabo> materias = new List<Materiabo>();

                    foreach (MateriaProfesor m in matsPro)
                    {
                        Materiabo mat = createMateria.FindMateriaByMatId(m.Mat_id);

                        materias.Add(mat);

                        mat = null;
                    }

                    matsProfs = new MateriasProfesorbo(pro, materias);
                }

            }
            catch (exceptions.daexception ex)
            {
                matsProfs = null;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                matsProfs = null;
                throw new exceptions.blexception(ex.Message);
            }

            return matsProfs;
        }

        public Gestión_UTN.bo.ProfesoresMateriabo FindMateriaProfesorByMateria(int mat_id)
        {
            ProfesoresMateriabo profsMats = null;

            try
            {
                Materiabo mat = (0 != mat_id)
                    ? createMateria.FindMateriaByMatId(mat_id)
                    : null;

                List<MateriaProfesor> matsPro = (null != mat)
                    ? createMatPro.FindMateriaProfesorByMateria(mat.Id)
                    : null;

                if (null != matsPro)
                {

                    List<Profesorbo> profesores = new List<Profesorbo>();

                    foreach (MateriaProfesor m in matsPro)
                    {
                        Profesorbo pro = createProfesor.FindProfesorByDNI(m.Pro_dni);

                        profesores.Add(pro);

                        pro = null;
                    }

                    profsMats = new ProfesoresMateriabo(mat, profesores);
                }

            }
            catch (exceptions.daexception ex)
            {
                profsMats = null;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                profsMats = null;
                throw new exceptions.blexception(ex.Message);
            }

            return profsMats;
        }
    }
}
